/**
 * API模块入口文件
 *
 */

import axios from 'axios'
import router from '../router';
import {ElMessage} from 'element-plus';
import {getToken, removeToken} from '../utils/storage';

// // 定义API响应数据结构
// export interface ApiResult<T> {
//     success: boolean;
//     code?: number;
//     message?: string;
//     data?: T;
// }

// 创建axios实例
const api = axios.create({
    baseURL: '',  // API前缀已经在各模块的配置文件中添加，这里设置为空
    timeout: 10000, // 请求超时时间
    headers: {
        'Content-Type': 'application/json',
    }
});

// 请求拦截器
api.interceptors.request.use(
    config => {
        // 从会话存储中获取token
        const token = getToken();
        if (token) {
            config.headers.Authorization = `Bearer ${token}`
        }

        return config
    },
    error => {
        // 处理请求错误
        console.error('请求错误：', error);
        return Promise.reject(error)
    }
);

// 响应拦截器
api.interceptors.response.use(
    response => {
        // 对响应数据做一些处理
        return response.data;
    },
    error => {
        // 处理响应错误
        if (error.response) {
            const {status} = error.response;

            // 未授权或token过期
            if (status === 401) {
                // 如果在登录页面，不需要显示401错误
                if (window.location.pathname.includes('/login')) {
                    console.warn('登录页面的401错误，不提示');
                    return Promise.reject(error);
                }

                ElMessage.error('登录已过期，请重新登录');
                removeToken(); // 使用storage模块的方法移除token
                router.push('/login');
            } else if (status === 403) {
                ElMessage.error('您没有权限访问此资源');
            } else if (status === 404) {
                console.warn('请求的资源不存在:', error.config.url);
            } else if (status === 500) {
                ElMessage.error('服务器错误，请稍后重试');
            } else {
                ElMessage.error(error.response.data?.message || '请求失败');
            }
        } else if (error.code === 'ERR_NETWORK') {
            // 网络错误，跨域错误等
            console.warn('网络连接错误，可能是CORS或后端服务未启动:', error.message);
            ElMessage.error('网络连接错误，请检查网络状态和服务器状态');
        } else {
            // 其他错误
            console.error('API请求错误:', error);
            ElMessage.error('请求发生错误，请稍后重试');
        }

        return Promise.reject(error);
    }
);

// export default api;